package thread;

/**
 * 线程的第一种创建方式:
 * 继承Thread并重写run方法
 */
public class ThreadDemo {
    public static void main(String[] args) {
        Thread t1 = new MyThread1();
        Thread t2 = new MyThread2();
        /*
            启动线程时调用的是线程的start方法，注意不要直接调用run方法。
            当start方法调用后，线程就纳入到线程调度器中被统一管理了，一旦调度器
            分配时间片给当前线程，CPU就开始执行这个线程的run方法了。
         */
        t1.start();
        t2.start();
    }
}

/**
 * 第一种创建线程的方式:
 * 优点:结构简单，利于匿名内部类形式创建
 * 缺点:
 * 1:由于java是单继承的，这导致继承Thread则无法继承其他类
 *   我们通常继承一个类的目的是为了复用方法，然后如果继承了Thread则无法再继承其他类
 *   来复用方法
 * 2:我们直接重写了Thread的run方法来定义任务，则导致线程与任务存在了耦合关系，不利于
 *   线程的重用。
 */
class MyThread1 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("你是谁啊?");
        }
    }
}

class MyThread2 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("开门，查水表的!");
        }
    }
}






